package com.suning.sawp.intf.bi;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Set;

import com.suning.sawp.dto.bi.OmsOrderItemPos;
import com.suning.sawp.dto.bi.StoreManRealIncSum;
import com.suning.sawp.po.bi.BiStoreRealIncDetailMEntity;
import com.suning.sawp.po.bi.StoreManDevMemberDetail;
import com.suning.sawp.po.bi.StoreManThisMonIncomeDetail;
import com.suning.sawp.po.bi.StoreManTotalDevMember;
import com.suning.sawp.po.bi.StoreManTotalIncome;

/**
 * 
 * bi收益数据库相干业务处理<br>
 * 〈功能详细描述〉
 *
 * @author 12061818
 * @see [相关类/方法]（可选）
 * @since [产品/模块版本] （可选）
 */
public interface BiDataDaoService {
    /**
     * 
     * 功能描述: 查询某店员某日的收益情况<br>
     * 〈功能详细描述〉
     *
     * @param staffId 员工工号
     * @param date 日期yyyyMMdd
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    StoreManTotalIncome queryTotalIncomeBySatffIdAndDate(String staffId, String date, String incSourceCode,
            boolean isBack);

    /**
     * 
     * 功能描述: 查询某店员某日发展的会员情况<br>
     * 〈功能详细描述〉
     *
     * @param staffId 员工工号
     * @param date 日期yyyyMMdd
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    StoreManTotalDevMember queryTotalMemberByStaffIdAndDate(String staffId, String date);

    /**
     * 
     * 功能描述: 统计符合条件的OMS订单记录数<br>
     * 〈功能详细描述〉
     *
     * @param staffId
     * @param statisDate
     * @param incSourceBiCode
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    int countOmsOrderInMon(String staffId, String statisDate, String incSourceBiCode);

    /**
     * 
     * 功能描述: 按月份分页查询OMS大订单信息<br>
     * 〈功能详细描述〉
     *
     * @param staffId
     * @param statisDate
     * @param startIndex
     * @param limit
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    List<StoreManThisMonIncomeDetail> queryOmsOrderInMon(String staffId, String statisDate, String incSourceBiCode,
            int startIndex, int limit);

    /**
     * 
     * 功能描述: 根据大订单号查询行订单信息<br>
     * 〈功能详细描述〉
     *
     * @param omsOrderIds
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    List<OmsOrderItemPos> queryOmsOrderItems(List<String> omsOrderIds, String statisDate);

    /**
     * 
     * 功能描述: 统计月份内的订单总金额<br>
     * 〈功能详细描述〉
     *
     * @param staffId
     * @param statisDate
     * @param incSourceBiCode
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    double countTotalIncomeInMon(String staffId, String statisDate, String incSourceBiCode);

    StoreManTotalIncome queryTotalIncomeBySatffIdAndDate(String staffId, String date);

    /**
     * 根据员工工号，提成时间类型, 来源分页查询销售提成明细
     * 
     * @param employeeId
     * @param timeType
     * @param sourceId
     * @param startIndex
     * @param pageSize
     * @return
     */
    List<StoreManThisMonIncomeDetail> queryIncomeDetailPage(String employeeId, String timeType, String sourceId,
            int startIndex, int pageSize);

    /**
     * 分页查询订单
     * 
     * @param staffId
     * @param statisDate
     * @param incSourceBiCode
     * @param startIndex
     * @param limit
     * @return
     */
    List<OmsOrderItemPos> queryOmsOrderItems(String staffId, String statisDate, String incSourceBiCode, int startIndex,
            int limit);

    /**
     * 
     * 功能描述: 取最近的统计日期<br>
     * 〈功能详细描述〉
     *
     * @param timeType
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    String getMaxStaticDate(String timeType);
    
    /**
     * 
     * 功能描述: 查询店员主推商品提成收益<br>
     * 〈功能详细描述〉
     *
     * @param staffId
     * @param startTime
     * @param endTime
     * @param goodsCodes
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    BigDecimal getStoreManMainPushActAmount(String staffId, Date startTime, 
            Date endTime, Set<String> goodsCodes);

    /**
     * 
     * 功能描述: 查询oms大订单下各个小订单的销售提成,按小订单号分组求和 <br>
     * 
     * @param omsOrderNo
     * @param date
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    List<OmsOrderItemPos> queryItemIncomeDetailByOrderNo(String omsOrderNo, String date);
    
    /**
     * 
     * 功能描述: 统计上月会员发展数<br>
     * 〈功能详细描述〉
     *
     * @param staffId
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    int countLastMonMember(String staffId);
    
    /**
     * 
     * 功能描述: 统计时间区间内的某店员的发展会员数<br>
     * 〈功能详细描述〉
     *
     * @param staffId   工号
     * @param startDate 开始日期
     * @param endDate   结束日期
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    int countMemberInPriord(String staffId, String startDate, String endDate);
    
    /**
     * 
     * 功能描述: 查询时间区间内的<br>
     * 〈功能详细描述〉
     *
     * @param staffId
     * @param startDate
     * @param endDate
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    List<StoreManDevMemberDetail> queryMemberDetailList(String staffId, String startDate, 
            String endDate, int startIndex, int limit);
    
    /**
     * 
     * 功能描述: 查询上月总计提成信息<br>
     * 〈功能详细描述〉
     * 实际提成表只存一个月数据，不需要具体时间
     * @param staffId
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    StoreManRealIncSum queryTotalIncomeInfo(String staffId);
    
    /**
     * 
     * 功能描述: 查询店员真实提成明细列表<br>
     * 〈功能详细描述〉
     *
     * @param staffId
     * @param startIndex
     * @param limit
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    List<BiStoreRealIncDetailMEntity> queryRealIncomeDetails(String staffId, int startIndex, int limit);

    /**
     * 
     * 功能描述: 查询POS渠道所有会员记录数<br>
     * 〈功能详细描述〉
     *
     * @param time
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    int countPosMember();
    
    /**
     * 
     * 功能描述: 分页查询POS会员数据<br>
     * 〈功能详细描述〉
     *
     * @param startIndex
     * @param limit
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    List<StoreManDevMemberDetail> queryPosMemberByPage(int startIndex, int limit);
}
